A typical architecture for a storage device includes a microprocessor directly connected to a ROM containing the executable code for the microprocessor. The use of more than one microprocessor in a single data storage device is also known in the art. As the complexity of the devices increases, the size of the needed code increases. Larger ROMs for storing larger amounts of code are, of course, more expensive. One scheme that is employed to reduce ROM size is to store only enough code (i.e., bootstrap code) in the ROM to make the storage device capable of reading the final code load from the storage device itself; but, since this code by definition has to make the device operational, it can be quite large as well.
Compressing part of the code in a personal computer's ROM has been proposed. (See "Compressed IPL ROM," Research Disclosure, No. 333, January 1992, Disclosed anonymously.) This is accomplished by compressing the contents of the ROM and decompressing the ROM into RAM before using its contents. To reduce the amount of ROM required to support the various devices which are attached to the computer, data compression is applied to the text contained in the ROM. A small decompression program also resides in the ROM. The decompression program expands the compressed ROM text into RAM. The majority of the power-on diagnostics and all of the initial program load function are then executed out of RAM.
G. S. Cheema, et al. teach that executable code can be loaded into memory in a compression format and dynamically decompressed to reduce the storage requirements of executable code. (See "Compression And Dynamic Decompression Of Executable Code", IBM Technical Disclosure Bulletin, No. 2, July 1990, pp. 297-298.) The process compresses an overlay library file such that each separate overlay can still be extracted from the file, when needed, without having to decompress the entire overlay library file.
Numerous compression schemes have been developed which can be applied to compress code with varying levels of efficiency and complexity. Huffman codes, which are variable length, have been widely used. B. L. Marks describes dividing characters into two groups based on frequency. The most frequent characters (A group) are encoded using Huffman coding. An additional Huffman code is allocated as a marker, or escape code, which tells the system that an uncompressed character follows. Thus, set B characters are prefixed with the Huffman "copy" character but are not encoded. (See "Trimming Of Huffman Coding Tables", IBM Technical Disclosure Bulletin, October 1979, p. 2106.)
It is well known in the disk drive art to use two microprocessors, with one handling front-end tasks such as interfacing with the host system and the other handling back-end tasks such as servo control. It is also known that code and data for one microprocessor in a disk drive can be stored in ROM which is accessible only by the other microprocessor which transmits the code and data to the first microprocessor for execution. It is also known that one or more registers (e.g., data, address and command registers) may be used to communicate the code from one microprocessor to the other.